package com.probiz.estore.content.service;

import java.util.List;

import com.probiz.estore.common.model.catalog.ContentCategory;
import com.probiz.estore.common.model.content.Content;
import com.probiz.estore.common.model.content.RelatedContent;
import com.probiz.estore.core.service.GenericManager;

/**
 * Manager interface for RelatedContent, responsible for business processing, and communicate between web and persistence layer.
 *
 */
public interface RelatedContentManager extends GenericManager<RelatedContent> {
	/**
	 *  根据类型和源文章或目录Id来获得其关联文章列表
	 * @param contentRelatedTypeId 关联类型id
	 * @param sourceKind 源类型
	 * @param sourceId 源id
	 * @param firstResult 开始
	 * @param maxResults 最大值
	 * @return 关联推荐文章列表
	 */
	public List<RelatedContent> getRelatedContentsByRecommendedTypeIdBySourceId(final int contentRelatedTypeId, final Integer sourceKind,final Integer sourceId, final int firstResult, final int maxResults);


	
	/**
	 * 根据关联类型、源文章或目录Id和关联文章Id获得该关联文章 
	 * @param recommendedTypeId 关联类型id
	 * @param sourceKind 源类型
	 * @param sourceId 源id
	 * @param contentId 关联文章id
	 * @return 关联实体
	 */
	public RelatedContent getRelatedContent(Integer recommendedTypeId,int sourceKind,Integer sourceId, Integer contentId);
	
	
	/**
	 * 手动评估  根据[关联类型name][源Id]获得特定范围的关联文章(不能重复) 
	 * @param contentRelatedTypeName 关联类型名称
	 * @param sourceKind 源类型
	 * @param sourceId 源id
	 * @param firstResult 开始
	 * @param maxResults 最大数量
	 * @return 文章列表
	 */
	public List<Content> getContentsByRelatedTypeNameBySourceId(final String contentRelatedTypeName, final int sourceKind, final Integer sourceId, final int firstResult, final int maxResults) ;
	
	
	/**
	 * 手动评估  根据[关联类型id][源Id]获得特定范围的关联文章(不能重复) 
	 * @param contentRelatedTypeId 关联类型id
	 * @param sourceKind 源类型
	 * @param sourceId 源id
	 * @param firstResult 开始
	 * @param maxResults 最大数量
	 * @return
	 */
	public List<Content> getContentsByRelatedTypeIdBySourceId(final Integer contentRelatedTypeId, final int sourceKind,  final Integer sourceId,	final int firstResult, final int maxResults);
	
	
	/**
	 * 保存关联文章 ，从数组中获取必要的参数 sourceContent和sourceCategory 只需指定其中之一
	 * @param sourceContent 源文章
	 * @param sourceCategory 源目录
	 * @param recommendedTypes 推荐类型数组
	 * @param contentIds 关联推荐文章id
	 */
	public void saveRelatedContentsFromArrays(Content sourceContent,ContentCategory sourceCategory,String[] recommendedTypeIds,String[] contentIds);
}
